热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

利用树莓派畅享落网电台音乐体验

最近重新拾起了闲置已久的树莓派,这台小巧的开发板已经沉寂了半年多。上个月闲暇时间较多,我决定将其重新启用。恰逢落网电台进行了改版,回忆起之前在树莓派论坛上看到有人用它来播放豆瓣音乐,便萌生了同样的想法。通过一番调试,终于实现了在树莓派上流畅播放落网电台音乐的功能,带来了全新的音乐享受体验。

     
 树莓派放在抽屉里吃灰有半年多了,去年玩了1个月后就没怎么开整了,上个月没工作,刚好有点闲暇,就把树莓派翻出来折腾,刚好碰到落网改版了,想起以前在树莓派论坛看到有网友拿树莓派来听豆瓣电台,代码那时我都下过,而且用树莓派试过,我喜欢上落网听歌,于是就想写一个
类似的python脚本....

首先 发现落网改版后 那些
mp3的信息就存在试听的html页面上的一个叫volPlaylist的js对象,比以前去相应的xml里找简单多了。
bubuko.com,布布扣 src="https://img.php1.cn/3c972/1e9f0/a6e/757efb87fb672053.jpeg">

正则拿到这个 json就可以播放了,不过这里没有mp3文件的播放时长,刚开始的时候不能自动播放下一曲,后来google了 一下 发现

mp3文件大小 码率  时长有对应的关系:  >【码率(kbps)=【文件大小】(字节)X8/【时间】(秒)/1000 
  

无法获得码率但发现落网的mp3 都是 128kbps 根据header里得到的Content-Length 获得mp3大小  于是就可以获得
mp3的时长了。。。

首先是 安装 mpg123 


apt-get install mpg123

下面是相应的python 代码  部分代码来自    在Pi上听豆瓣电台之Python(有更新)



#!/usr/bin/python
#
coding: utf-8
#
Filename: luoFm.py
import httplib
import json
import re
import sys
import subprocess
import urllib2
import time
from select import select
reload(sys)
sys.setdefaultencoding(
utf-8)
class LuoFM_CLI:
def __init__(self, channel):
self.user
= None
self.username
= ‘‘
self.ch
= channel
self.kbps
= 128
def get_songlist(self):
httpConnection
= httplib.HTTPConnection(www.luoo.net)
httpConnection.request(
GET, /music/ + self.ch)
luoHtml
= httpConnection.getresponse().read()
playPattern
= "volPlaylist\s*=\s*(\[\s*\{[\s\S]+?\}\s*\]);"
playUrl
= re.compile(playPattern).findall(luoHtml)
self.songlist
= json.loads(playUrl[0])
def control(self, r):
rlist, _, _
= select([sys.stdin], [], [], 1)
if rlist:
s
= sys.stdin.readline()
if s[0] == n:
return next
elif s[0] == p:
return prev
def start(self):
self.get_songlist()
n
= 0
while n < len(self.songlist):
r
= self.songlist[n]
song_uri
= r[mp3]
self.playmode
= True
request
= urllib2.Request(song_uri)
response
= urllib2.urlopen(request)
headers
= response.info()
#获取播放时长,这里选用128kbps 的码率 时长 = mp3的大小(kb) * 8 / 128
duratiOns= int(headers[Content-Length]) * 8 / 1000 / self.kbps
starttime
= time.time()
print(u正在播放: + r[title] + u 歌手: + r[artist])
self.player
= subprocess.Popen([mpg123, -v, song_uri], shell=False, universal_newlines=True, stdin=None,
stdout
=subprocess.PIPE, stderr=subprocess.STDOUT)
while self.playmode:
c
= self.control(r)
endtime
= time.time()
usetime
= endtime - starttime - durations
if c == next or usetime > 4:
self.player.kill()
n
= n + 1
break
elif c == prev:
self.player.kill()
n
= n - 1
break
self.start
c
= raw_input(请输入您想听的专辑数字:)
luoFm
= LuoFM_CLI(c)
use_info
= u‘‘‘
下一曲输入n
上一曲输入p
‘‘‘
print(use_info)
while 1:
luoFm.start()

执行$python luoFm.py

界面 专辑号要手动输入  

bubuko.com,布布扣

 

 

参考文章  

在Pi上听豆瓣电台之Python(有更新)

比特率

 

用树莓派来听落网电台,布布扣,bubuko.com


推荐阅读
  • Node.js 配置文件管理方法详解与最佳实践
    本文详细介绍了 Node.js 中配置文件管理的方法与最佳实践,涵盖常见的配置文件格式及其优缺点,并提供了多种实用技巧和示例代码,帮助开发者高效地管理和维护项目配置,具有较高的参考价值。 ... [详细]
  • 本文全面解析了 gRPC 的基础知识与高级应用,从 helloworld.proto 文件入手,详细阐述了如何定义服务接口。例如,`Greeter` 服务中的 `SayHello` 方法,该方法在客户端和服务器端的消息交互中起到了关键作用。通过实例代码,读者可以深入了解 gRPC 的工作原理及其在实际项目中的应用。 ... [详细]
  • 在处理遗留数据库的映射时,反向工程是一个重要的初始步骤。由于实体模式已经在数据库系统中存在,Hibernate 提供了自动化工具来简化这一过程,帮助开发人员快速生成持久化类和映射文件。通过反向工程,可以显著提高开发效率并减少手动配置的错误。此外,该工具还支持对现有数据库结构进行分析,自动生成符合 Hibernate 规范的配置文件,从而加速项目的启动和开发周期。 ... [详细]
  • 【Linux进阶指南】第一阶段第三课:体验与部署Ubuntu系统
    在正式踏上Linux学习之旅之前,本课程将引导你深入体验和部署Ubuntu系统。通过详细的操作步骤和实践演练,你将掌握Ubuntu的基本安装、配置及常用命令,为后续的进阶学习打下坚实的基础。此外,课程还将介绍如何解决常见问题和优化系统性能,帮助你更加高效地使用Ubuntu。 ... [详细]
  • 在学习LVM(逻辑卷管理)技术的过程中,我对MD(多设备)、DM(设备映射器)以及逻辑设备和RAID的实现有了深入的理解。LVM2架构主要由DM主模块及其多个子模块组成,其中linear子模块用于创建线性设备,类似于简单的磁盘分区拼接。此外,还探讨了其他子模块如striped、mirror等在提高性能和数据冗余方面的应用。通过实际操作,我掌握了LVM的基本配置和管理方法,能够灵活应对不同存储需求。 ... [详细]
  • 如何在CAD阅图软件中将PDF文件高效转换为CAD格式?
    如何在CAD阅图软件中将PDF文件高效转换为CAD格式? ... [详细]
  • 如何设置域名默认301重定向至www前缀
    在进行域名默认301重定向至www前缀的操作前,确保你已经拥有一个有效的域名,并且该域名已正确解析到外部主机地址,能够正常访问网站。本文主要针对IIS 7及以上版本的用户,IIS 7之前的版本不适用。我们将详细介绍如何通过IIS管理器配置301重定向,确保所有请求都能自动跳转到带有www前缀的URL,从而提升网站的SEO效果和用户体验。 ... [详细]
  • 为了向用户提供虚拟应用程序,通常会在基础架构中部署StoreFront或Web Interface。为了确保安全的远程访问,通常需要在DMZ中配置Secure Gateway或Access Gateway。本文详细对比了这两种界面工具的功能特性,包括用户管理、安全性、性能优化等方面,为企业选择合适的解决方案提供了全面的参考。 ... [详细]
  • 基于域名、端口和IP的虚拟主机构建方案
    本文探讨了在单台物理服务器上构建多个Web站点的虚拟主机方案,详细介绍了三种主要的虚拟主机类型:基于域名、基于IP地址和基于端口的虚拟主机。每种类型的实现方式及其优缺点均进行了深入分析,为实际应用提供了全面的技术指导。 ... [详细]
  • C++入门必备:首个博客知识点汇总
    本文总结了C++初学者需要掌握的关键知识点,特别强调了成员类型的区分。其中,protected成员与private成员在本类中的作用相同,但protected成员允许派生类的成员函数访问,而private成员则不允许。此外,文章还介绍了其他重要的C++基础概念,如类的构造函数、析构函数以及继承机制,为初学者提供了一个全面的学习指南。 ... [详细]
  • MongoVUE基础操作指南:轻松上手数据库管理
    本文介绍了MongoVUE的基础操作,旨在帮助用户轻松掌握数据库管理技巧。MongoVUE是一款功能强大的MongoDB客户端工具,虽然需要注册,但其用户友好的界面和丰富的功能使其成为许多开发者的首选。文中详细解释了安装步骤、基本配置以及常见操作方法,并对一些常见的问题进行了修正和补充,确保用户能够快速上手并高效使用MongoVUE进行数据库管理。 ... [详细]
  • 在Python网络编程中,多线程技术的应用与优化是提升系统性能的关键。线程作为操作系统调度的基本单位,其主要功能是在进程内共享内存空间和资源,实现并行处理任务。当一个进程启动时,操作系统会为其分配内存空间,加载必要的资源和数据,并调度CPU进行执行。每个进程都拥有独立的地址空间,而线程则在此基础上进一步细化了任务的并行处理能力。通过合理设计和优化多线程程序,可以显著提高网络应用的响应速度和处理效率。 ... [详细]
  • TypeScript 实战分享:Google 工程师深度解析 TypeScript 开发经验与心得
    TypeScript 实战分享:Google 工程师深度解析 TypeScript 开发经验与心得 ... [详细]
  • 1. 设置用户密码:使用 `slappasswd` 工具生成加密密码,确保账户安全。具体步骤如下:输入命令 `slappasswd -s NewPassword`,系统将提示重新输入新密码,并生成加密后的哈希值 {SSHA}xxxxxxxxxxxxxxxxx。2. 编写配置文件:编辑 `vildapus` 配置文件,添加必要的用户账户信息,以确保新用户能够顺利登录系统。 ... [详细]
  • 掌握Linux Shell核心概念与基础技能,本文详细介绍了文件系统和安全管理中的`chmod`命令。`chmod`命令支持两种模式:符号模式和绝对模式。符号模式使用`ugo`表示用户类别,`rwx`表示权限类型;而绝对模式则通过八进制数值来精确设置不同用户的权限。此外,文章还探讨了其他重要的Shell命令和技巧,帮助读者全面理解和应用Linux环境下的文件管理和安全控制。 ... [详细]
author-avatar
马岱五号_668
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有